02 控制流
控制流用于决定代码的执行路径。if用于条件判断,for和while用于循环,match用于模式匹配,这些语句共同构成 Python 程序的基本执行逻辑。
一、if语句
1.1 基本语法
python
>>> x = int(input("请输入一个整数: "))
请输入一个整数: 42
>>> if x < 0:
... x = 0
... print('负数变为零')
... elif x == 0:
... print('零')
... elif x == 1:
... print('一')
... else:
... print('更多')
更多elif是else if的缩写。一个if语句可以包含多个elif分支,最后的else分支可选。
1.2 条件表达式
Python 3.10 之前没有switch语句,通常使用if...elif...else替代。条件表达式不需要括号,但语句末尾必须有冒号。
二、for循环
2.1 遍历序列
Python 的for循环直接遍历序列中的元素,不需要手动维护索引:
python
>>> words = ['cat', 'window', 'defenestrate']
>>> for w in words:
... print(w, len(w))
...
cat 3
window 6
defenestrate 122.2 遍历时修改列表
遍历列表时如果需要修改列表本身(例如删除元素),通常应先复制一份再遍历:
python
>>> words = ['cat', 'window', 'defenestrate']
>>> for w in words[:]: # 遍历副本
... if len(w) > 6:
... words.insert(0, w)
...
>>> words
['defenestrate', 'cat', 'window', 'defenestrate']直接遍历words并同时修改它,可能导致不可预测的结果。
三、range()函数
3.1 基本用法
需要遍历数字序列时,可以使用range():
python
>>> for i in range(5):
... print(i)
...
0
1
2
3
43.2 指定起止和步长
python
>>> for i in range(5, 10):
... print(i)
...
5
6
7
8
9
>>> for i in range(0, 10, 3):
... print(i)
...
0
3
6
9
>>> for i in range(-10, -100, -30):
... print(i)
...
-10
-40
-70range(start, end, step)——起始值(默认0)、结束值(不含)、步长(默认1)。
3.3 配合len()遍历索引
python
>>> a = ['Mary', 'had', 'a', 'little', 'lamb']
>>> for i in range(len(a)):
... print(i, a[i])
...
0 Mary
1 had
2 a
3 little
4 lamb多数情况下,使用enumerate()遍历索引和值更清晰。
3.4 range转列表
python
>>> list(range(5))
[0, 1, 2, 3, 4]四、break、continue和else
4.1 break和continue
break用于跳出循环,continue用于跳过当前迭代:
python
>>> for n in range(2, 10):
... if n % 2 == 0:
... print(f"发现偶数: {n}")
... continue
... print(f"发现奇数: {n}")
发现偶数: 2
发现奇数: 3
发现偶数: 4
发现奇数: 5
发现偶数: 6
发现奇数: 7
发现偶数: 8
发现奇数: 94.2 循环的else子句
for和while循环可以带else子句。当循环正常结束(未被break中断)时,else子句会执行:
python
>>> for n in range(2, 10):
... for x in range(2, n):
... if n % x == 0:
... print(n, '等于', x, '*', n//x)
... break
... else:
... # 循环正常结束,说明没找到因子
... print(n, '是质数')
...
2 是质数
3 是质数
4 等于 2 * 2
5 是质数
6 等于 2 * 3
7 是质数
8 等于 2 * 4
9 等于 3 * 3如果循环被break中断,else子句不会执行。
五、while循环
5.1 基本用法
python
>>> a, b = 0, 1
>>> while a < 10:
... print(a, end=' ')
... a, b = b, a+b
...
0 1 1 2 3 5 85.2 死循环
python
>>> while True:
... response = input('输入quit退出: ')
... if response == 'quit':
... break
...
输入quit退出: hello
输入quit退出: quit六、pass语句
pass不执行任何操作,用于语法上需要语句但逻辑上暂不需要处理的场景:
python
>>> while True:
... pass # 忙等待,按Ctrl+C退出
>>> class MyEmptyClass:
... pass
>>> def init_log():
... pass # 还没实现,先占位七、match语句(3.10+)
7.1 基本匹配
python
>>> status = 404
>>> match status:
... case 200:
... print("OK")
... case 404:
... print("Not Found")
... case 500:
... print("Server Error")
... case _:
... print("Unknown")
...
Not Found_是通配符,可以匹配任何值。
7.2 解构匹配
python
>>> point = (1, 0)
>>> match point:
... case (0, 0):
... print("原点")
... case (x, 0):
... print(f"X轴上,x={x}")
... case (0, y):
... print(f"Y轴上,y={y}")
... case (x, y):
... print(f"点({x}, {y})")
...
X轴上,x=17.3 匹配字典
python
>>> action = {"type": "move", "x": 10, "y": 20}
>>> match action:
... case {"type": "move", "x": x, "y": y}:
... print(f"移动到({x}, {y})")
... case {"type": "click", "target": target}:
... print(f"点击{target}")
...
移动到(10, 20)7.4 守卫条件
python
>>> point = (1, 1)
>>> match point:
... case (x, y) if x == y:
... print(f"在对角线上,x=y={x}")
... case (x, y):
... print(f"点({x}, {y})")
...
在对角线上,x=y=1if后面是守卫条件,只有模式匹配成功且条件为真时才进入该分支。
八、总结
| 语句 | 用途 |
|---|---|
if/elif/else | 条件判断 |
for | 遍历序列 |
while | 条件循环 |
range() | 生成数字序列 |
break | 跳出循环 |
continue | 跳过当前迭代 |
else(循环) | 循环正常结束时执行 |
pass | 占位符 |
match/case | 模式匹配(3.10+) |
for循环直接遍历元素,range()用于生成数字序列。循环的else子句只在未被break中断时执行。match是 Python 3.10 引入的模式匹配语句,支持解构和守卫条件。